
package com.medranocg.gd;

import com.medranocg.gd.Usuario;
import com.entrepids.psec.security.client.services.UserContext;
import com.entrepids.psec.security.client.services.UserContextManager;

class RBAC {

    // Mapea un ROL string en GD con la [opcion, accion] en RBAC
    static def GD_RBAC_ROLES = [
        "CARGAR_DOCUMENTO": [opcion: "CARGAR", accion: "DOCUMENTO"],
        "CONSULTAR_DOCUMENTO": [option: "CONSULTAR", accion: "DOCUMENTO"],
    ]

    def userName
    static def instance = null

    private def RBAC(session, userName) {
        this.userName = userName
    }

    static def getInstance(session, userName) {
        if (instance == null) {
            instance = new RBAC(session, userName)            
        }
        instance
    }

    def getUsuario() {
		UserContext uc = UserContextManager.getInstance().getUserContext(userName, "liferay")
		new Usuario(userName, uc.getUserTO().getDsFirstName(), uc.getUserTO().getDsLastName())
    }

    def tienePermiso(rol) {
        def accion_rbac = GD_RBAC_ROLES[rol]
        // TODO: Pregutar por el permiso al verdadero RBAC
        // if prod.RBAC.canPerform(userName, accion_rbac.option, accion_rbac.accion) {
        // return true 
        // }
        true 
    }
    
    def roles() {
        def userRoles = []
        GD_RBAC_ROLES.each { gd_role, rbac_action -> 
            userRoles.add(gd_role)
        }
        userRoles        
    }

}

